// Project imports:
import 'package:palmf_hid/common/values/conf.dart';

import 'common_order_util.dart';

///读取同步手持机测试记录数据
///结果	批号	样本类型	结果保留小数位数	结果显示	结果判断		参考值范围下限	参考值范围上限
// 4字节	11字节	1字节	1字节	1字节	1字节	7字节无效	4字节浮点数	4字节浮点数
// 单精度浮点数	ASCII	无符号整型数，1：全血 2：血清 3：其它	无符号整型数，上位机根据此字节数据保留结果小数位，采用四舍五入	判断上下限，1：低于线性下限，结果加“<"  2：高于线性上限，结果加">" 3：线性范围内不需添加	0：下箭头，1：上箭头，2：无
Future<Map<String, dynamic>> readSyncData(List<int> list) async {
  Map<String, dynamic> map = {};
  // 项目名称 11字节	结果单位 8字节	结果 4字节 	批号 11字节	样本类型 1字节	结果保留小数位数 1	结果显示 1
  String projectNameStr = intArrToHex(list.sublist(0, 11)).toUpperCase();
  String projectName = hexToAscii(projectNameStr
      .replaceAll(REF, TEMP_CHAR_REF)
      .replaceAll(BT, TEMP_CHAR_BT)
      .replaceAll(SYNC_BT, TEMP_CHAR_BT)
      .replaceAll(SYNC_REF, TEMP_CHAR_REF))
      .replaceAll(TEMP_CHAR_REF_CN, REF_STR)
      .replaceAll(TEMP_CHAR_BT_CN, BT_STR)
      .replaceAll('\u0000', "")
      .replaceAll(" ", "")
      .trim();
  map["project"] = projectName;
  map["curveBatchNo"] = radixToString(list.sublist(23, 34))
      .replaceAll('\u0000', "")
      .replaceAll(" ", "")
      .trim();
  map["sample"] = list.sublist(34, 35)[0];
  map["resultUnit"] = radixToString(list.sublist(11, 19)).trim();
  int resultDisplayInt = list.sublist(36, 37)[0];
  // 判断上下限，1：低于线性下限，结果加“<"  2：高于线性上限，结果加">" 3：线性范围内不需添加
  String resultDisplay = "";
  if (resultDisplayInt == 1) {
    resultDisplay = "<";
  } else if (resultDisplayInt == 2) {
    resultDisplay = ">";
  }
  map["resultDisplay"] = resultDisplay;
  //结果字节高位在前反转
  double result =
  getFloatFromIntBits(intArrToHex(list.sublist(19, 23).reversed.toList()));
  map["result"] = result;
  int saveNum = list.sublist(35, 36)[0];
  saveNum = saveNum > 10 ? 10 : saveNum;
  map["saveNum"] = saveNum;


  map["checkNo"]=int.parse(intArrToHex(list.sublist(43, 45)), radix: 16);
  //十进制数组转hex hex转双精度 双精度转十进制
  map["patientId"] = int.parse(hexToAscii(intArrToHex(list.sublist(45, 54))));
  map["reagentIdentity"] =
      hexToAscii(intArrToHex(list.sublist(54, 60))).toString();

  return map;
}
